﻿// Inner Fire 游戏引擎库
// BinaryModel - 二进制模型
//
// Copyright (c) 2025 by 尔西大帝. All rights reserved.
//
// 所属层级：应用层(4)
// 将已经载入的模型进行缓存，这样就不用每次都重新载入。
//
// Author: 尔西大帝
// Email: 2670613871@qq.com
// Created: 2025-01-14

#pragma once

#include <game/resource/model.h>
#include <EASTL/vector.h>
#include <string>
#include <cached_file.h>

namespace ifire::game {

class BinaryModel  {
public:
  // 通过一个Model进行初始化，无论是读取还是保存，都直接使用这个Model进行操作。
  BinaryModel(Model* model);
  BinaryModel(const BinaryModel& lhs) = delete;
  BinaryModel& operator=(const BinaryModel& lhs) = delete;
  ~BinaryModel() = default;

  // 保存到缓存文件
  void Save();
  // 从缓存文件载入
  void Load();

  // 判断是否拥有缓存文件，并且缓存文件是最新的
  bool IsCached();

  // 得到缓存文件名
  std::string GetCachedFilename() const;

private:

  Model* model_;  
  ikit::CachedFile file_;
};

using BinaryModelPtr = std::unique_ptr<BinaryModel>;

} // namespace ifire::game